package com.sunday.redis.study;//package com.sunday.leaf.study;
//
//import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
//import org.springframework.data.redis.connection.*;
//import org.springframework.util.Assert;
//import org.springframework.util.StringUtils;
//
//import java.net.URI;
//import java.net.URISyntaxException;
//import java.util.ArrayList;
//import java.util.List;
//
//abstract class MultiRedisConnectionConfiguration {
//
//    protected final RedisStandaloneConfiguration getStandaloneConfig(RedisProperties redisProperties) {
//        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
//        if (StringUtils.hasText(redisProperties.getUrl())) {
//            ConnectionInfo connectionInfo = parseUrl(redisProperties.getUrl());
//            config.setHostName(connectionInfo.getHostName());
//            config.setPort(connectionInfo.getPort());
//            config.setPassword(RedisPassword.of(connectionInfo.getPassword()));
//        }
//        else {
//            config.setHostName(redisProperties.getHost());
//            config.setPort(redisProperties.getPort());
//            config.setPassword(RedisPassword.of(redisProperties.getPassword()));
//        }
//        config.setDatabase(redisProperties.getDatabase());
//        return config;
//    }
//
//    protected final RedisClusterConfiguration getClusterConfiguration(
//            RedisProperties redisProperties) {
//        if (redisProperties.getCluster() == null) {
//            return null;
//        }
//        RedisProperties.Cluster clusterProperties = redisProperties.getCluster();
//        RedisClusterConfiguration config = new RedisClusterConfiguration(
//                clusterProperties.getNodes());
//        if (clusterProperties.getMaxRedirects() != null) {
//            config.setMaxRedirects(clusterProperties.getMaxRedirects());
//        }
//        if (redisProperties.getPassword() != null) {
//            config.setPassword(RedisPassword.of(redisProperties.getPassword()));
//        }
//        return config;
//    }
//
//    protected final RedisSentinelConfiguration getSentinelConfig(RedisProperties redisProperties) {
//        RedisProperties.Sentinel sentinelProperties = redisProperties.getSentinel();
//        if (sentinelProperties != null) {
//            RedisSentinelConfiguration config = new RedisSentinelConfiguration();
//            config.master(sentinelProperties.getMaster());
//            config.setSentinels(createSentinels(sentinelProperties));
//            if (redisProperties.getPassword() != null) {
//                config.setPassword(RedisPassword.of(redisProperties.getPassword()));
//            }
//            config.setDatabase(redisProperties.getDatabase());
//            return config;
//        }
//        return null;
//    }
//
//    protected ConnectionInfo parseUrl(String url) {
//        try {
//            URI uri = new URI(url);
//            boolean useSsl = (url.startsWith("rediss://"));
//            String password = null;
//            if (uri.getUserInfo() != null) {
//                password = uri.getUserInfo();
//                int index = password.indexOf(':');
//                if (index >= 0) {
//                    password = password.substring(index + 1);
//                }
//            }
//            return new ConnectionInfo(uri, useSsl, password);
//        }
//        catch (URISyntaxException ex) {
//            throw new IllegalArgumentException("Malformed url '" + url + "'", ex);
//        }
//    }
//
//    private List<RedisNode> createSentinels(RedisProperties.Sentinel sentinel) {
//        List<RedisNode> nodes = new ArrayList<>();
//        for (String node : sentinel.getNodes()) {
//            try {
//                String[] parts = StringUtils.split(node, ":");
//                Assert.state(parts.length == 2, "Must be defined as 'host:port'");
//                nodes.add(new RedisNode(parts[0], Integer.valueOf(parts[1])));
//            }
//            catch (RuntimeException ex) {
//                throw new IllegalStateException(
//                        "Invalid redis sentinel " + "property '" + node + "'", ex);
//            }
//        }
//        return nodes;
//    }
//
//    protected static class ConnectionInfo {
//
//        private final URI uri;
//
//        private final boolean useSsl;
//
//        private final String password;
//
//        public ConnectionInfo(URI uri, boolean useSsl, String password) {
//            this.uri = uri;
//            this.useSsl = useSsl;
//            this.password = password;
//        }
//
//        public boolean isUseSsl() {
//            return this.useSsl;
//        }
//
//        public String getHostName() {
//            return this.uri.getHost();
//        }
//
//        public int getPort() {
//            return this.uri.getPort();
//        }
//
//        public String getPassword() {
//            return this.password;
//        }
//    }
//
//}
